#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Times;
using Cephei.QL;
using Cephei.QL.Indexes;
namespace Cephei.QL.Instruments
{
     // <summary> 
	// ! \ingroup instruments  If no payment convention is passed, the convention of the floating-rate schedule is used.  \warning if <tt>Settings::includeReferenceDateCashFlows()</tt> is set to <tt>true</tt>, payments occurring at the settlement date of the swap might be included in the NPV and therefore affect the fair-rate and fair-spread calculation. This might not be what you want.  \test - the correctness of the returned value is tested by checking that the price of a swap paying the fair fixed rate is null. - the correctness of the returned value is tested by checking that the price of a swap receiving the fair floating-rate spread is null. - the correctness of the returned value is tested by checking that the price of a swap decreases with the paid fixed rate. - the correctness of the returned value is tested by checking that the price of a swap increases with the received floating-rate spread. - the correctness of the returned value is tested by checking it against a known good value.
	// </summary>
    [Guid ("73216014-3EF7-46a1-BFFA-42D20B1C0491"),ComVisible(true)]
	public interface IVanillaSwap : Cephei.QL.Instruments.ISwap
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Double FairRate {get;}
        
		 Double FairSpread {get;}
        
		 Cephei.QL.Times.IDayCounter FixedDayCount {get;}
        
		 Cephei.IVector<Cephei.QL.ICashFlow> FixedLeg {get;}
        
		 Double FixedLegBPS {get;}
        
		 Double FixedLegNPV {get;}
        
		 Double FixedRate {get;}
        
		 Cephei.QL.Times.ISchedule FixedSchedule {get;}
        
		 Cephei.QL.Times.IDayCounter FloatingDayCount {get;}
        
		 Cephei.IVector<Cephei.QL.ICashFlow> FloatingLeg {get;}
        
		 Double FloatingLegBPS {get;}
        
		 Double FloatingLegNPV {get;}
        
		 Cephei.QL.Times.ISchedule FloatingSchedule {get;}
        
		 Cephei.QL.Indexes.IIborIndex IborIndex {get;}
        
		 Double Nominal {get;}
        
		 QL.Times.BusinessDayConventionEnum PaymentConvention {get;}
        
		 Double Spread {get;}
        
		 QL.Instruments.VanillaSwap.TypeEnum Type {get;}
    }

    // <summary> 
	// ! \ingroup instruments  If no payment convention is passed, the convention of the floating-rate schedule is used.  \warning if <tt>Settings::includeReferenceDateCashFlows()</tt> is set to <tt>true</tt>, payments occurring at the settlement date of the swap might be included in the NPV and therefore affect the fair-rate and fair-spread calculation. This might not be what you want.  \test - the correctness of the returned value is tested by checking that the price of a swap paying the fair fixed rate is null. - the correctness of the returned value is tested by checking that the price of a swap receiving the fair floating-rate spread is null. - the correctness of the returned value is tested by checking that the price of a swap decreases with the paid fixed rate. - the correctness of the returned value is tested by checking that the price of a swap increases with the received floating-rate spread. - the correctness of the returned value is tested by checking it against a known good value. Factory
	// </summary>
   	[ComVisible(true)]
    public interface IVanillaSwap_Factory // : Collection_Factory<IVanillaSwap, ICell<IVanillaSwap>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        
	    IVanillaSwap Create (QL.Instruments.VanillaSwap.TypeEnum type, Double nominal, Cephei.QL.Times.ISchedule fixedSchedule, Double fixedRate, Cephei.QL.Times.IDayCounter fixedDayCount, Cephei.QL.Times.ISchedule floatSchedule, Cephei.QL.Indexes.IIborIndex iborIndex, Double spread, Cephei.QL.Times.IDayCounter floatingDayCount, Microsoft.FSharp.Core.FSharpOption<QL.Times.BusinessDayConventionEnum> paymentConvention, Cephei.QL.IPricingEngine QL_Pricer);
    }
}

